package com.study.a01mystream;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.function.Consumer;
import java.util.function.IntFunction;

public class StreamDemo9 {
    public static void main(String[] args) {

        /*void forEach(Consumer action)   遍历
        long count()   统计
        toArray()    收集流中的元素，放到数组中*/


        ArrayList<String> list = new ArrayList<>();
        Collections.addAll(list,"张三","李四","王五","王六","王七","张无极");

        //Consumer中的泛型就表述数据中的类型
        //accept方法中的参数s，就表示流中的每一个数据
        //方法体表示操作
       /* list.stream().forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);

            }
        });*/

        list.stream().forEach(s-> System.out.println(s));


        //统计
        long count = list.stream().count();
        System.out.println(count);

/*
        //toArray()
        Object[] arr1 = list.stream().toArray();
        System.out.println(Arrays.toString(arr1));*/

        //intFunction的泛型：具体类型的数组
        //apply的参数：流中元素的个数
        //apply的返回值：具体类型的数组
        //方法体，创建数组

        //toArray()方法的参数，负责创建一个指定类型的数组
        //toArray()方法的底层，会一次得到流里面的每一个数据，并把数据放到数组里面
        //toArray()返回值就是装有所有数据的数组
        String[] arr2 = list.stream().toArray(new IntFunction<String[]>() {
            @Override
            public String[] apply(int value) {
                return new String[value];
            }
        });
        System.out.println(Arrays.toString(arr2));

        //lambad表达式
        String[] arr3 = list.stream().toArray(value->new String[value]);
        System.out.println(Arrays.toString(arr3));

    }
}
